package com.cn.io.nio;

import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class RandomAccessNio {

    public static void main(String[] args) throws Exception {
        RandomAccessFile aFile = new RandomAccessFile("D:\\opt\\def.txt", "rw");
        FileChannel inChannel = aFile.getChannel();
        ByteBuffer buf = ByteBuffer.allocate(48);
        //从通道中读取一个缓冲区大小的数据，如果已经读完了则返回-1。
        int bytesRead = inChannel.read(buf);
        //判断是否读了数据
        while (bytesRead != -1) {
            //反转Buffer，从写模式转换成读模式
            buf.flip();
            //使用get()读取Buffer
            while(buf.hasRemaining()){
                System.out.print((char) buf.get()); // read 1 byte at a time
            }
            //清空buf的全部(全部清空了就不用flip反转模式了，因为本来就是空的，非空不反转直接写会造成数据反转了从而混乱)
            buf.clear();
            //再次给buf写入数据
            bytesRead = inChannel.read(buf);
        }
        //关闭文件
        aFile.close();
    }
}
